package com.cw.jeeyt.service.intf.api;

import java.util.List;

import com.cw.jeeyt.common.Order;
import com.cw.jeeyt.service.bo.api.ApiFacadeModuleInfoBo;
import com.cw.lang.mybatis.dto.PageInfo;

/**
 * api接口文档所在项目模块业务接口
  * @author chenw
 * @version 1.0.0
 */
public interface ApiFacadeModuleInfoService {
    /**
     * 查询所有api接口文档所在项目模块列表信息
     */
    List<ApiFacadeModuleInfoBo> queryApiFacadeModuleInfoList() throws Exception;

    /**
     * 删除api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfoBo
     */
    void delete(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo) throws Exception;

    /**
     * 更新api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfoBo
     */
    void update(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo) throws Exception;

    /**
     * 更新api接口文档所在项目模块不为空的字段
     *
     * @param apiFacadeModuleInfoBo
     */
    void updateSelective(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo) throws Exception;

    /**
     * 根据主键查询api接口文档所在项目模块
     *
     * @return
     */
    ApiFacadeModuleInfoBo getApiFacadeModuleInfoById(Long id) throws Exception;

    /**
     * 新增api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfoBo
     * @return
     */
    Long insert(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo) throws Exception;

    /**
     * 新增api接口文档所在项目模块不为空的字段
     *
     * @param apiFacadeModuleInfoBo
     * @return
     */
    Long insertSelective(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo) throws Exception;

    /**
     * 分页查询api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfoBo
     * @param pageNo
     * @param pageSize
     * @return
     * @throws Exception
     */
    PageInfo<ApiFacadeModuleInfoBo> queryByPage(ApiFacadeModuleInfoBo apiFacadeModuleInfoBo, Integer pageNo,
        Integer pageSize, Order order) throws Exception;

    /**
     * 检查当前项目下模块是否已存在
     *
     * @param projectId
     * @param moduleCode
     * @return
     * @throws Exception
     */
    ApiFacadeModuleInfoBo queryByProjectIdAndModuleCode(Long projectId, String moduleCode) throws Exception;

    /**
     * 根据项目id查询所有api接口文档所在项目模块列表信息
     *
     * @param projectId 项目id
     */
    List<ApiFacadeModuleInfoBo> queryListByProjectId(Long projectId) throws Exception;

    /**
     * 批量保存接口模块信息
     *
     * @param apiFacadeModuleInfoList
     * @throws Exception
     */
    void saveApiModuleInfoBat(List<ApiFacadeModuleInfoBo> apiFacadeModuleInfoList) throws Exception;

    /**
     * 根据模块编码查询模块信息
     *
     * @param moduleCodeList
     * @return
     * @throws Exception
     */
    List<ApiFacadeModuleInfoBo> queryListByModuleCodes(List<String> moduleCodeList) throws Exception;
}
